home *** CD-ROM | disk | FTP | other *** search
- ; > &.Doc180.Kernel.Serial
-
- Title: Serial extensions/1
- Version: 0.06
- Started: 08-Apr-88
- Last updated: 28-Sep-88
- Status: Complete
-
- Serial Line Extensions
- ----------------------
-
- The Arthur serial line interface is very closely modelled on the Beeb
- serial line interface. That in turn was modelled on the 6850 ACIA chip
- in the Beeb.
-
- This document describes extensions to the RS423 serial line interface
- in RISC OS 2.00. These extensions are in addition to fixing some of the
- problems in Arthur 1.20, which are caused by a faulty ACIA chip.
-
- Extensions to FX 7 and 8
- ------------------------
- OSBYTE calls 7 and 8 are used to set the receive and transmit baud rates
- respectively. The range of parameters has been extended to allow access to
- the baud rates available on the 6551 ACIA which were not available on earlier
- BBC machines. The full set of parameters is as follows:-
-
- 0 => 9600 9 => 50
- 1 => 75 10 => 110
- 2 => 150 11 => 134.5
- 3 => 300 12 => 600
- 4 => 1200 13 => 1800
- 5 => 2400 14 => 3600
- 6 => 4800 15 => 7200
- 7 => 9600
- 8 => 19200
-
- SWI OS_SerialOp (&57)
- ---------------------
-
- in: R0 = reason code
- Other input registers as determined by reason code
-
- out: V=1 => R0 -> error
- V=0 => R0 preserved
- Other registers may return values, as determined by reason code
-
- Reason code R0=0 (Read/write serial states)
- -------------------------------------------
- This call is used to read and write various states of the serial system. These
- states are presented as a 32-bit word. The call performs the operation
-
- New state = (Old state AND R2) EOR R1
-
- in: R1 = EOR mask
- R2 = AND mask
-
- out: R1 = old value of state
- R2 = new value of state
-
- The bits in the serial state have the following meanings:-
-
- Read/Write flags
- ----------------
- Bit Meaning
- --- -------
- 0 Clear => No software flow-control (must rely on hardware handshaking).
-
- Set => Use XON/XOFF flow-control protocol. The hardware will still
- do CTS handshaking (ie if CTS goes low transmission will
- stop), but we will not make RTS go low from our end.
-
- 1 Clear => If the ~DCD bit in the status register goes high, then cause
- an RS423 event. Also, if a character is received when ~DCD is
- high, then cause an RS423 event, and do not enter character
- into buffer.
-
- Set => Ignore the state of the ~DCD bit (apart from maintaining a
- soft copy of this bit for the user to read). Note, however,
- that both GTE and CMD chips prevent reception when the ~DCD
- bit is high, and the GTE chip causes transmit problems when
- this bit is high.
-
- 2 Clear => If the ~DSR bit in the status register is high, then do not
- transmit characters.
-
- Set => Ignore the state of the ~DSR bit (apart from maintaining a
- soft copy of this bit for the user to read).
-
- 3 Clear => DTR bit in command register programmed to 1 (data terminal
- ready).
-
- Set => DTR bit in command register programmed to 0 (data terminal
- not ready). Note that in this state, the ACIA cannot transmit
- or receive characters. Any characters currently being
- transmitted or received when this state is selected may be
- garbled. The user should deselect this state before attempting
- to transmit or receive again.
-
- 4..15 Undefined - do not modify these bits.
-
- Read-only flags
- ---------------
- Bit Meaning
- --- -------
- 16 Clear => Your transmission has not been stopped by the reception of an
- XOFF character (always clear if XON/XOFF not being used).
-
- Set => Your transmission has been stopped by the reception of an XOFF
- character.
-
- 17 Clear => You intend the other end to be in the XON (enabled) state.
-
- Set => You intend the other end to be in the XOFF (disabled) state.
-
- When a character is received, and the buffer is nearly full (as
- determined by OSBYTE 203), and XON/XOFF protocol is being used, then
- this bit gets set, and on the next transmit interrupt an XOFF character
- will be sent. When sufficient characters have been removed from the
- input buffer to render it not nearly full, this bit is cleared and on
- the next transmit interrupt an XON character is sent. Note that the
- fact that this bit is set does not imply that the other end has
- received an XOFF character yet.
-
- 18 Clear => the ~DCD bit in the status register is low, indicating that
- carrier is present.
-
- Set => the ~DCD bit in the status register is high, indicate absence
- of carrier. In this state the ACIA receiver is disabled (and
- on GTE chips transmission is affected, too)
-
- 19 Clear => the ~DSR bit in the status register is low, indicating a
- 'ready' state.
-
- Set => the ~DSR bit in the status register is high, indicating a
- 'not-ready' state. If bit 2 of the serial state is clear, then
- no characters will be transmitted in this state.
-
- 20 Clear => the ring indicator bit in IOC is low.
-
- Set => the ring indicator bit in IOC is high.
-
- 21..31 Undefined - do not modify these bits.
-
- Reason code R0=1 (Read/write data format)
- -----------------------------------------
-
- in: R1 = -1 => just read format
- R1 <> -1 => R1 determines new format
-
- Bits 0,1 : 0 => 8 bit word
- 1 => 7 bit word
- 2 => 6 bit word
- 3 => 5 bit word
-
- Bit 2 : 0 => 1 stop bit
- 1 => 2 stop bits
- OR 1.5 stop bits if 5 bit word without parity
- OR 1 stop bit if 8 bit word with parity
-
- Bit 3 : 0 => parity disabled (no parity bit)
- 1 => parity enabled
-
- Bits 4,5 : 0 => odd parity
- 1 => even parity
- 2 => parity bit always 1 on TX (ignored on RX)
- 3 => parity bit always 0 on TX (------""-----)
-
- out: R1 = old format in bits 0..5 as above
-
- Reason code R0=2 (Send break)
- -----------------------------
-
- in: R1 = length of break in centiseconds
-
- out: R1 preserved
-
- This call sets the ACIA to transmit a break, then waits in the foreground with
- IRQs on for R1 centiseconds before resetting it to normal. Note that any
- character being transmitted at the time the call is made may be garbled. After
- sending the break the remaining characters in the output buffer (if any) will
- be transmitted.
-
- Reason code R0=3 (Send byte)
- ----------------------------
-
- in: R1 = character to be sent
-
- out: R1 preserved
- C=0 => character sent
- C=1 => character not sent (because buffer full)
-
- This call puts a character in the RS423 output buffer, and reenables the
- transmit interrupt if it had previously been disabled by the MOS.
-
- Reason code R0=4 (Get byte)
- ---------------------------
-
- in: -
-
- out: C=0 => R1 = character read
- C=1 => R1 preserved, no character read, input buffer empty
-
- This call removes a character from the RS423 input buffer, if one is present.
- If removing a character leaves the input buffer with more free spaces than are
- specified by OSBYTE 203, then the other end is encouraged to start transmitting
- again - this may involve either reenabling RTS or the transmission of an XON
- character, depending on which protocol has been selected (see above).
-
- Note that reception must have been enabled with FX2,2 (or FX2,1) before this
- call can be used.
-
- Reason code R0=5 (Read/set receive baud rate)
- ---------------------------------------------
-
- in: R1 = -1 => just read receive baud rate
- R1 = 0..15 => set receive baud rate to this value (as for FX 7 or 8)
-
- out: R1 = old receive baud rate, in range 0..15
-
- Reason code R0=6 (Read/set transmit baud rate)
- ---------------------------------------------
-
- in: R1 = -1 => just read transmit baud rate
- R1 = 0..15 => set transmit baud rate to this value (as for FX 7 or 8)
-
- out: R1 = old transmit baud rate, in range 0..15
-
-